Proyecto: Selector de engranajes Integrantes: Karen Quezada / Alan Moreno / Genaro González Explicación de los documentos adjuntos Modelo CAD (Carpeta EnsamAKG): En esta carpeta se encuentran los archivos CAD y la disposición de los componentes utilizados en el proyecto. Los elementos incluidos son: una cámara web, un soporte de cartón negro, un brazo robótico MK2, una banda transportadora con un motor de 12V, dos fuentes de alimentación de 5V y 12V, un Arduino Uno con un shield para la conexión de motores, y un puente H L298N. Por último, se encuentra una caja roja de cartón junto a una base de madera prensada. Para visualizar el conjunto, es necesario descomprimir el archivo ZIP y abrir el archivo 'Robot-Banda Transportadora.f3z'. A continuación, se deben añadir los componentes de la carpeta correspondiente. MK2KINE.ino: Este archivo contiene el código de cinemática del brazo. Con este código, el brazo es capaz de clasificar los engranajes en los distintos espacios de la caja roja. Además, procesa la información proveniente de la cámara y es el encargado de sincornizar todos los movimientos; Banda-brazo-Señal camara Para que este código funcione correctamente, es necesario importar la librería de los servos de la siguiente manera: #include . Esto si se trabaja con Visual Studio Code FINAL_VERSION: este archivo .py contiene el programa que cuenta el número de dientes de los engranajes usando visión computancional (openCV), además también entrega la posición y el diámetro de los mismos. Utiliza las librerías cv2, numpy, statistics, serialControl y time. La función principal se llama tooth_counter, que aplica un preprocesamiento a la imagen a través de los filtros morfológicos dilate y erode, además de filter2D y threshold, este último para trabajar con la imagen binarizada. De la imagen se extraen los contornos del engranaje. Además se dibujan líneas horizontales verdes en el display de la imagen streaming, las cuales están calibradas a las distancias del mundo real, mostrando estas líneas que están separadas por 10 mm. También se dibujó un rectángulo rojo que demarca la zona en la cual se procesa el engranaje (solo es procesado si el centro de este se encuentra en esa zona). El proceso para contar el número de dientes consiste en trabajar con matrices de numpy, las cuales representan el color de los píxeles de la circunferencia que va creciendo desde el centro del engranaje, realizando un barrido angular que crece en la dirección radial. Si todos los valores de la matriz creada son negros (se les asigna el numero 1 a los píxeles negros y 0 a los blancos) quiere decir que está "dentro" del engranaje y aún no comienza el perfil de los dientes. Cuando se cumple que comienzan a haber valores 0, quiere decir que ya hay zonas blancas (fuera del engranaje), es decir, está en los dientes. El límite de la última matriz de solo 1's es el k que se guarda como last_k_with_ones, el cual repre- senta el diámetro de los engranajes justo antes de comenzar el perfil de dientes. Se crea un radio sumando este k más una constante que fue determinada experimentalmente y dio 17, para que la circunferencia de radio r=last_k_with_ones+17 corte con el perfil y se pueda determinar el número de intersecciones resultantes, en donde cambiar de pixel negro a blanco significa entrar y salir de los dientes, pero se divide en dos, ya que al entrar y al salir de un solo diente ya son dos intersecciones. Este valor es el número de dientes. Finalmente, esta función se incorpora al bucle infinito Main() en donde primeramente se le quita la distorsión de la cámara a los frames procesados, utilizando para ello las matrices mtx, new_camera_matrix y el vector dist. El mecanismo para obtener el valor más fidedigno de número de dientes consiste en guardar los valores que arroje la función tooth_counter en una lista, descartando mediante un filtro los valores inferiores a 12, ya que no se trabajaron con engranajes con menos de 12 dientes. Luego con statistics se calculó la moda, siendo ese el valor definitivo. El programa entrega la respuesta cuando deja de ver al engranaje en la zona que se definió por una cierta cantidad de frames, ya que asume que se pasó al siguiente engranaje. ComunicacionSerial.py: Es un archivo python que ayuda a la comunicación serial entre la cámara y el brazo robótico. Gears V4: Engranes a imprimir, los cuales cuentan con espacio en su centro para una tuerca hexagonal m4 Layout: Plano que cuenta con la distribución y ajustes de posición de todas las componentes del proyecto GEAR SELECTOR VIDEO.mp4: Video del equipo funcionando Explicación de referencias del proyecto: Detection of Gear Tooth Number and Common Normal Length Change Based on Computer Vision [1] y Research on Detection of Micro Plastic Gear Tooth Based on Dummy Circle Scan Method [2]: El primer artículo aborda la medición de los dientes de un engranaje centrándose en encontrar la longitud común normal. Para encontrar el contorno externo se utiliza la función "findContours()". Con "boundingRect()", se obtienen las coordenadas rectangulares y se muestran los valores de longitud y ancho. Además, para encontrar el centro del engranaje y su radio interno, se utiliza la transformada de Hough, que se destaca por ser insensible al ruido de la imagen. La idea principal presentada para resolver este problema es crear un círculo ficticio de radio "r", el cual permite cortar precisamente el perfil de los dientes del engranaje. El segundo artículo se encuentra referenciado en el artículo anterior y profundiza en el método de utilizar un círculo ficticio. En primer lugar, se indica la necesidad de realizar un preprocesamiento de imágenes utilizando filtros de realce de bordes para eliminar el ruido y preservar los detalles del perfil de los dientes. Para lograr estos objetivos, se utiliza el método de Otsu, donde se crea un círculo ficticio de radio "r" arbitrario. De esta manera, el círculo ficticio y el perfil del engranaje tienen "2z" (donde "z" es el número de dientes) intersecciones. Pick and place industrial robot controller with computer vision [3] Se señalan tres procesos: el análisis de escena, que consiste en el cálculo de la posición y orientación del objeto, la conversión de coordenadas entre el sistema de coordenadas de la cámara y el del robot, la planificación de trayectorias basada en el sistema de visión e interconexión del sistema de visión con el robot. Para encontrar la región de interés (captada por la cámara) se utilizan traslaciones, rotaciones y escalamientos. El sistema de visión se interconecta con el robot mediante OpenABB. La comunicación entre el sistema de visión y el controlador se realiza a través de Ethernet. MKlap2: Pick and place with MK2 arm[4] En el proyecto de pick and place se presentan los cálculos de cinemática directa e inversa, además de proporcionar información detallada sobre el proceso. El objetivo principal del proyecto es desarrollar un sistema capaz de recoger un objeto de una ubicación determinada y detener la banda transportadora una vez que el objeto ha sido detectado. Referencias: 1 Y. Wu et al., "Detection of Gear Tooth Number and Common Normal Length Change Based on Computer Vision,"2019 International Conference on Artificial Intelligence and Advanced Manufacturing (AIAM), Dublin, Ireland, 2019, pp. 618-621, doi: 10.1109/AIAM48774.2019.00128. 2 Zhang, Z., Wang, K., Yang, X., & Chen, L. (2010). Research on Detection of Micro Plastic Gear Tooth Based on Dummy Circle Scan Method. Applied Mechanics and Materials, 37-38, 1002-1005. doi:10.4028/www.scientific.net/AMM.37-38.1002 3 P. Andhare and S. Rawat, "Pick and place industrial robot controller with computer vision,"2016 International Conference on Computing Communication Control and automation (ICCUBEA), Pune, India, 2016, pp. 1-4, doi: 10.1109/ICCUBEA.2016.7860048. 4. Rivera, G. and Chepillo, A. 2022. MKlap2: Pick and place with MK2 arm. [en linea] [consulta: 16 junio 2023]